.NET6 C#, LineBot, Line Messaging API, C#, dotnet core
Hihi 各位好,今天開始會對 Line Bot 可推送訊息進行詳細的介紹,那今天這篇的內容就是針對以下這三種訊息介紹與實作
Line Bot 可推送的Text Message 是由 text(文字)、emoji 組成。
text 想必不用多說,而 Emoji 的部分根據文件描述,emoji 可以使用 Line 提供的 emojis,也可以使用 Unicode emojis(也就是手機鍵盤可以直接按出來的emoji)。
Line 提供的 emojis : 請參考這個清單「List of available LINE emojis」內的 emojis,只有這些 emojis 可以提供給 Line Bot 傳送。
Unicode emojis : 直接將對應的 emoji 放入 Text 內即可。
在上一篇建立傳訊機制時已經宣告了 TextMessageDto,現在只要添加 Emoji Property 到這個 Class 中即可。
Emoji 文件內容,注意 Line Emoji 使用方式需在 Text 中使用 "$" 符號作為 emoji 位置的標記,並且在下方添加 emoji object 將 Index 設為該 "$" 符號的位置,則訊息傳送到 Line 後有被對應到的 "$" 符號就會被對應的 Line emoji 替換。
在 TextMessageDto.cs 下新增 Class
public class TextMessageEmojiDto
{
public int Index { get; set; }
public string ProductId { get; set; }
public string EmojiId { get; set; }
}
public List<TextMessageEmojiDto>? Emojis { get; set; }
使用廣播功能測試 Text Message 有沒有正確宣告。
測試用 RequestBody
{
"Messages" : [
{
"Type":"text",
"Text" : "$ 表情符號文字測試訊息 $ ?",
"Emojis" : [
{
"Index" : 0,
"ProductID" :"5ac1bfd5040ab15980c9b435",
"EmojiId":"003"
},
{
"Index" : 13,
"ProductID" :"5ac1bfd5040ab15980c9b435",
"EmojiId":"004"
}
]
}
]
}
Line Bot 能傳送的貼圖訊息也請參考這個「List of available stickers」,只有在裡面的貼圖能夠傳送。
貼圖訊息非常單純,照著文件的格式就好
在 Dtos/Messages 資料夾下新增 StickerMessageDto.cs
using LineBotMessage.Enum;
namespace LineBotMessage.Dtos
{
public class StickerMessageDto : BaseMessageDto
{
public StickerMessageDto()
{
Type = MessageTypeEnum.Sticker;
}
public string PackageId { get; set; }
public string StickerId { get; set; }
}
}
/// <summary>
/// 接收到廣播請求時,在將請求傳至 Line 前多一層處理,依據收到的 messageType 將 messages 轉換成正確的型別,這樣 Json 轉換時才能正確轉換。
/// </summary>
/// <param name="messageType"></param>
/// <param name="requestBody"></param>
public void BroadcastMessageHandler(string messageType, object requestBody)
{
string strBody = requestBody.ToString();
dynamic messageRequest = new BroadcastMessageRequestDto<BaseMessageDto>();
switch (messageType)
{
case MessageTypeEnum.Text:
messageRequest = _jsonProvider.Deserialize<BroadcastMessageRequestDto<TextMessageDto>>(strBody);
break;
case MessageTypeEnum.Sticker:
messageRequest = _jsonProvider.Deserialize<BroadcastMessageRequestDto<StickerMessageDto>>(strBody);
break;
}
BroadcastMessage(messageRequest);
}
{
"Messages" : [
{
"Type":"sticker",
"PackageId":"789",
"StickerId":"10855"
}
]
}
圖片訊息也可說是非常重要的訊息內容了,除了圖片給人的印象遠比文字還深刻以外,圖片能表達出的訊息也能比文字豐富許多,所以在考慮廣告行銷時,將宣傳圖片傳給使用者是比文字更好的選擇。
Line Bot 傳送圖片訊息時有幾項需要注意的
先在 Dtos/Messages 資料夾下新增 ImageMessageDto.cs
using LineBotMessage.Enum;
namespace LineBotMessage.Dto
{
public class ImageMessageDto : BaseMessageDto
{
public ImageMessageDto()
{
Type = MessageTypeEnum.Image;
}
public string OriginalContentUrl { get; set; }
public string PreviewImageUrl { get;set; }
}
}
case MessageTypeEnum.Image:
messageRequest = _jsonProvider.Deserialize<BroadcastMessageRequestDto<ImageMessageDto>>(strBody);
break;
圖片訊息需要使用圖片在網路上的絕對路徑,意思就是圖片需要自己來管理,Line 並不處理圖片存放的問題,那這邊針對這個問題提供兩種方法,這兩種方法在後面都會使用到~那目前就先選擇一種使用即可。
將圖片放到可提供公開的絕對路徑的網站 例如: imgur
使用 Static Files (推薦一起實作)
// -------- 新增內容 --------
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(builder.Environment.ContentRootPath, "UploadFiles")),
RequestPath = "/UploadFiles",
});
// -------- 新增內容 --------
app.MapControllers();
app.Run();
準備兩張圖片,放到 UploadFiles 資料夾中
使用 swagger 測試圖片訊息能否正確傳送
測試用 RequestBody
{
"Messages" : [
{
"Type":"image",
"OriginalContentUrl" : "your original content url",
"PreviewImageUrl" : "your preview image url"
}
]
}
各位可以去看看手機版的 Line 對於 Image Message 是怎麼顯示的~
今天的介紹就到這邊了,下一篇要介紹的訊息會是 Video、Audio、Location 的訊息,各位就敬請期待吧。
如果想要參考今天範例程式碼的部份,下面是 Git Repo 連結,方便大家參考。
Day8_Text、Sticker、Image Message
腦筋急轉彎
如果發現某張圖片的使用量(reuqests)很高,有沒有什麼方式能夠加速的方式呢?
1.用webp格式
2.用CLOUDFLARE 把圖片快取在雲端.?
想知道您的解方!~